package dao

// dao -> data access

import (
	"github.com/google/logger"
	"github.com/topaz-h/gin-web/model"
	"github.com/topaz-h/gin-web/tools"
)

// MemberDao 结构体结构tools中的xorm引擎
type MemberDao struct {
	*tools.OrmEngine
}

// InsertSmsCode 插入一条smsCode
func (m *MemberDao) InsertSmsCode(smsCode model.SmsCode) int64 {
	// md.Insert()// 可变参数
	result, err := m.InsertOne(&smsCode)
	if err != nil {
		logger.Error(err.Error())
		return 0
	}
	return result
}

// ValidateLoginSms 验证登陆时验证码和手机号是否已匹配
func (m *MemberDao) ValidateLoginSms(phone, code string) *model.SmsCode {
	var sms model.SmsCode
	if _, err := m.Where("phone = ? and code = ?", phone, code).Get(&sms); err != nil {
		logger.Error(err.Error())
		return nil
	}
	// 由于返回指针类型，所以取地址返回
	return &sms
}

// QueryByPhoneOfMember 查询member表中是否有此手机号的会员用户
func (m *MemberDao) QueryByPhoneOfMember(phone string) *model.Member {
	var member model.Member
	// 没有指定库名,而是在Get中传递相应的结构体
	if _, err := m.Where("mobile = ?", phone).Get(&member); err != nil {
		logger.Error(err.Error())
		return nil
	}
	// 由于返回指针类型，所以取地址返回
	return &member
}

// InsertMember 注册用户
func (m *MemberDao) InsertMember(member model.Member) int64 {
	result, err := m.InsertOne(&member)
	if err != nil {
		logger.Error(err.Error())
		return 0
	}
	return result
}

// QueryByUserNameOfMember 查询member表中是否有此用户名和密码的会员用户
func (m *MemberDao) QueryByUserNameOfMember(username, password string) *model.Member {
	var member model.Member
	// Get 已给member赋值，返回一个bool和error
	if _, err := m.Where("user_name = ? and password = ?", username, password).Get(&member); err != nil {
		logger.Error(err.Error())
		return nil
	}
	// 由于返回指针类型，所以取地址返回
	return &member
}

// UpdateAvatar 更新用户表中的头像地址
func (m *MemberDao) UpdateAvatar(id int64, avatar string) int64 {
	member := model.Member{Avatar: avatar}
	result, err := m.Where("id = ?", id).Update(&member)
	if err != nil {
		logger.Error(err.Error())
		return 0
	}
	// 由于返回指针类型，所以取地址返回
	return result
}
